package fr.miage.orleans.aar.modele.valueobject;

import java.util.ArrayList;
import java.util.List;

import fr.miage.orleans.aar.modele.EquipeTournoi;
import fr.miage.orleans.aar.modele.EtatMatchTour;
import fr.miage.orleans.aar.modele.EtatTournoi;
import fr.miage.orleans.aar.modele.MatchTour;
import fr.miage.orleans.aar.modele.Tournoi;

public class ValueObjectTournoi {

    private int idTournoi;

    private String nomTournoi;

    private EtatTournoi etatTournoi;
    private List<ValueObjectEquipeMinimal> equipesInscriptes;
    private List<ValueObjectMatch> matchs;
    
    private int nbMatchsEnPreparation;
    private int nbMatchsEnCours;
    private int nbMatchsTermines;
    
    public ValueObjectTournoi(EquipeTournoi et) {
        this.idTournoi = et.getTournoi().getTournoiId();
        this.nomTournoi = et.getTournoi().getNomTournoi();
        this.etatTournoi = et.getTournoi().getEtatTournoi();
    }

    public ValueObjectTournoi(Tournoi t) {
        this.idTournoi = t.getTournoiId();
        this.nomTournoi = t.getNomTournoi();
        this.etatTournoi = t.getEtatTournoi();
        this.equipesInscriptes = new ArrayList<>();
        for (EquipeTournoi equipe : t.getEquipesTournoi()) {
            ValueObjectEquipeMinimal voel = new ValueObjectEquipeMinimal(equipe);
            this.equipesInscriptes.add(voel);
        }
	
	this.nbMatchsEnPreparation = 0;
	this.nbMatchsEnCours = 0;
	this.nbMatchsTermines = 0;
        this.matchs = new ArrayList<>();
        for (MatchTour matchTour : t.getMatchs()) {
	    EtatMatchTour etatMatchTour = matchTour.getEtatMatch();
	    if(etatMatchTour == EtatMatchTour.NON_COMMENCE) {
		this.nbMatchsEnPreparation++;
	    } else {
		if(etatMatchTour == EtatMatchTour.TERMINE_A_GAGNE || etatMatchTour == EtatMatchTour.TERMINE_B_GAGNE) {
		    this.nbMatchsTermines++;
		} else {
		    this.nbMatchsEnCours++;
		}
	    }
            ValueObjectMatch vom = new ValueObjectMatch(matchTour);
            this.matchs.add(vom);
        }
    }

    public List<ValueObjectEquipeMinimal> getEquipesInscriptes() {
        return equipesInscriptes;
    }

    public EtatTournoi getEtatTournoi() {
        return etatTournoi;
    }

    public int getIdTournoi() {
        return idTournoi;
    }

    public List<ValueObjectMatch> getMatchs() {
        return matchs;
    }

    public String getNomTournoi() {
        return nomTournoi;
    }

    public int getNbMatchsEnPreparation() {
	return nbMatchsEnPreparation;
    }

    public int getNbMatchsEnCours() {
	return nbMatchsEnCours;
    }

    public int getNbMatchsTermines() {
	return nbMatchsTermines;
    }
    /*
    public static boolean somethingHasChanged(ValueObjectTournoi vot , )
    */
    
}
